package com.sojson.util.security.shiro.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.apache.shiro.authz.annotation.Logical;

/**
 * 自定义权限过滤注解
 * 
 * @author liu
 * @Date 2020-06-11 14:50:34
 * @Description
 *
 */
//注解的使用范围:
//TYPE:类,接口（包括注解类型）或枚举的声明
//FIELD:属性的声明
//METHOD:方法的声明
//PARAMETER:方法形式参数声明
//CONSTRUCTOR:构造方法的声明
//LOCAL_VARIABLE:局部变量声明
//ANNOTATION_TYPE:注解类型声明
//PACKAGE:包的声明
@Target({ ElementType.TYPE, ElementType.METHOD })
//注解的运行阶段(什么时期执行):
//SOURCE:类似注解,只在源码级别有效
//CLASS:能被编译到Class文件中,可以在编译时根据注解做一些处理动作,运行时无效
//RUNTIME:可以在运行期的加载阶段被加载到Class对象中,可以通过反射得到这个注解,并通过判断是否有这个注解或这个注解中属性的值,从而执行不同的程序代码段
@Retention(RetentionPolicy.RUNTIME)
public @interface RequiredPermission {

    /** 拦截权限的数组 */
    String[] value();

    /** 多个权限拦截的关系(并且还是或者关系) */
    Logical logical() default Logical.AND;

    /** 方法的描述 */
    String des() default "";

}